#ifndef STATE_H_INCLUDED
#define STATE_H_INCLUDED

#include "stateManager.h"

class State
{
public:
    virtual void enter() = 0;
    virtual void exit() = 0;

    virtual void pause() = 0;
    virtual void resume() = 0;

    void changeState( State* state) { StateManager::getSingletonPtr()->changeState(state); }
    void pushState( State* state) { StateManager::getSingletonPtr()->pushState(state); }
	void popState() { StateManager::getSingletonPtr()->popState(); }

	virtual bool FrameFunc() = 0;

    virtual void keyPressed( const OIS::KeyEvent &e ) = 0;
	virtual void keyReleased( const OIS::KeyEvent &e ) = 0;

	virtual void mouseMoved( const OIS::MouseEvent &e ) = 0;
	virtual void mousePressed( const OIS::MouseEvent &e, OIS::MouseButtonID id ) = 0;
	virtual void mouseReleased( const OIS::MouseEvent &e, OIS::MouseButtonID id ) = 0;

	virtual void buttonPressed( const OIS::JoyStickEvent &e, int val) = 0;
	virtual void buttonReleased( const OIS::JoyStickEvent &e, int val) = 0;
	virtual void axisMoved( const OIS::JoyStickEvent &e, int val) = 0;

protected:
	State() { }
};

#endif // STATE_H_INCLUDED
